﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using LogicaNegocio;
using AccesoBD;
//FALTA VALIDAR MASKTEXTBOX, FOTO, VERIFICAR LO DE LA FECHA DE ALTA
namespace PresentacionEscritorio
{
    public partial class frmRegistrarEmpleado : Form, IOpcion
    {
        private GestorBarrio GB = new GestorBarrio();
        private GestorDomicilio GD = new GestorDomicilio();
        private GestorLocalidad GL = new GestorLocalidad();
        private GestorSexos GS = new GestorSexos();
        private GestorEmpleado GE = new GestorEmpleado();
        private GestorTiposDocumento GTD = new GestorTiposDocumento();
        private GestorCargo GC = new GestorCargo();
        public Empleado emSeleccionado { get; set; }
        private string opElegida;

        //VER METODO CONSTRUCTOR
        public frmRegistrarEmpleado()
        {
            opElegida = "REG";
            InitializeComponent();
        }

        //LOAD FORM
        private void frmRegistrarEmpleado_Load(object sender, EventArgs e)
        { //INICIALIZACMOS FECHAS.
            txtFechaInicioEmp.ReadOnly = true;
            txtFechaInicioEmp.Text = Convert.ToString(DateTime.Now.ToString("yy/yy/yyyy"));
            //-----FECHA BAJA
            lblDescripcionFechaBaja.Visible = false;
            dtFechaBajaEmp.Checked = false;
            dtFechaBajaEmp.Enabled = false;
            dtFechaBajaEmp.Visible = false;
            lblFBEmp.Visible = false;
            //-----FECHA ALTA
            dtFechaAltaEp.Enabled = false;
            dtFechaAltaEp.Visible = false;
            lblFAEmp.Visible = false;
            //-----LBLDESCRIPCION BAJA
            lblDescripcionBaja.Visible = false;
            //Cargamos Localidades
            cargarLocalidad();
            //Carga Sexo
            cargarSexo();
            //Carga Tipo documento
            cargarTipoDocumento();
            //Cargar Cargos
            cargarCargos();
            //Legajo del empleado
            //VERIFICACMOS EL TIPO DE OPCION.
            cmbBarrioEmp.SelectedIndex = -1;
            cmbCargoEmpl.SelectedIndex = -1;
            cmbLocalidadEm.SelectedIndex = -1;
            cmbSexoEmpleado.SelectedIndex = -1;
            cmbTipoDocEmpleado.SelectedIndex = -1;
            switch (opElegida)
            {
                case Opcion.OpConsultar:
                    btnAceptar.Text = "Aceptar";
                    btnCancelar.Text = "Salir";
                    LblEmplado.Text = "Consultar Empleado";
                    lblFAEmp.Visible = true;
                    dtFechaAltaEp.Visible = true;
                    controlesPanelEmpleadoFalse();
                    consultarDatosEmpleado();
                    break;
                case Opcion.OpModificar:
                    btnAceptar.Text = "Aceptar";
                    btnCancelar.Text = "Salir";
                    LblEmplado.Text = "Modificar Empleado";
                    controlesPanelEmpleadoTrue();
                    consultarDatosEmpleado();
                    break;
                case Opcion.OpRegistrar:
                    btnAceptar.Text = "Registrar";
                    btnCancelar.Text = "Salir";
                    dtFechaAltaEp.Text = Convert.ToString(DateTime.Now);
                    txtLegajoEmpleado.Text = Convert.ToString(GE.obtenerUltimoLegajo() + 1);
                    dtFechaAltaEp.Visible = true;
                    lblFAEmp.Visible = true;
                    break;
                case Opcion.OpDarBaja:
                    LblEmplado.Text = "Registrar Baja de Empleado";
                    btnAceptar.Text = "Registrar";
                    btnCancelar.Text = "Salir";
                    controlesPanelEmpleadoFalse();
                    consultarDatosEmpleado();
                    dtFechaBajaEmp.Checked = true;
                    lblFBEmp.Visible = true;
                    lblDescripcionFechaBaja.Visible = true;
                    dtFechaBajaEmp.Visible = true;
                    dtFechaAltaEp.Visible = true;
                    lblFAEmp.Visible = true;
                    descripcionBaja();
                    break;

            }

        }

        //CARGAMOS CMBS
        private void cargarTipoDocumento()
        {

            if (GTD.obtenerTipoDocumento() == null)
            {
                MessageBox.Show("No estan cargados los Tipos de documentos");
            }
            else
            {
                cmbTipoDocEmpleado.DataSource = GTD.obtenerTipoDocumento();
                cmbTipoDocEmpleado.ValueMember = "Codigo";
                cmbTipoDocEmpleado.DisplayMember = "Nombre";
            }


        }
        private void cargarCargos()
        {

            cmbCargoEmpl.DataSource = GC.obtenerTodos();
            cmbCargoEmpl.ValueMember = "idCargo";
            cmbCargoEmpl.DisplayMember = "nombre";

        }
        private void cargarSexo()
        {
            if (GS.obtenerSexos() == null)
            {
                MessageBox.Show("No estan cargados los Sexos");
            }
            else
            {
                cmbSexoEmpleado.DataSource = GS.obtenerSexos();
                cmbSexoEmpleado.ValueMember = "codSexo";
                cmbSexoEmpleado.DisplayMember = "Nombre";
            }


        }
        private void cargarLocalidad()
        {
            if (GL.ObtenerTodos() == null)
            {
                MessageBox.Show("No estan cargados las localidades");
            }
            else
            {
                cmbLocalidadEm.DataSource = GL.ObtenerTodos();
                cmbLocalidadEm.ValueMember = "idLocalidad";
                cmbLocalidadEm.DisplayMember = "nombre";
                cargarBarrios(int.Parse(cmbLocalidadEm.SelectedValue.ToString()));
            }

        }
        private void cargarBarrios(int localidad)
        {
            if (GB.ObtenerTodos(localidad) == null)
            {
                MessageBox.Show("No estan cargados los barrios");
            }
            else
            {
                cmbBarrioEmp.DataSource = GB.ObtenerTodos(localidad);
                cmbBarrioEmp.ValueMember = "idBarrio";
                cmbBarrioEmp.DisplayMember = "nombre";

            }
        }

        //LIMPIAMOS EL FORM
        private void limpiar()
        {
            txtNombreEmpleado.Text = "";
            txtApellidoEmpleado.Text = "";
            txtCelularEmpl.Text = "";
            txtTelefonoEmpleado.Text = "";
            txtNumDocumentoEmpleado.Text = "";
            txtCorreoelectronicoEmpl.Text = "";
            txtCalleEmpl.Text = "";
            txtNroCalleEmp.Text = "";
            txtDepartamentoEm.Text = "";
            txtCodigoPostalEm.Text = "";
            dtFechaNacimiento.Value = DateTime.Now;
            cmbBarrioEmp.SelectedIndex = -1;
            cmbCargoEmpl.SelectedIndex = -1;
            cmbLocalidadEm.SelectedIndex = -1;
            cmbSexoEmpleado.SelectedIndex = -1;
            cmbTipoDocEmpleado.SelectedIndex = -1;

        }


        //SETEAMOS ENABLE A FALSE LOS CONTROLES DE LOS PANELES
        private void controlesPanelEmpleadoFalse()
        {
            foreach (Control item in panelDatosEmpleado.Controls)
            {

                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }

            }
            foreach (Control item in panelDomicilioEmpleado.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }
            }
            foreach (Control item in panelEmpleadoCargo.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }
            }

        }
        //SETEAMOS ENABLE A TRUE TODOS LOS CONTROLES DEL PANEL
        private void controlesPanelEmpleadoTrue()
        {
            panelDatosEmpleado.Enabled = true;
            panelDomicilioEmpleado.Enabled = true;
            panelEmpleadoCargo.Enabled = true;

        }
        //VERIFICAMOS SI EL EMPLEADO EXISTE REGISTRADO
        private bool validarExistencia()
        {//Aca validamos la existencia de la persona que se quiere registrar como paciente.
            long numdoc = long.Parse(txtNumDocumentoEmpleado.Text);
            return GE.verificarExistenciaEmpleado(long.Parse(txtNumDocumentoEmpleado.Text));


        }
        //CAMBIO CMBLOCALIDAD
        private void cmbLocalidadEm_SelectionChangeCommitted(object sender, EventArgs e)
        {
            cargarBarrios(int.Parse(cmbLocalidadEm.SelectedValue.ToString()));
        }
        //ACEPTAMOS SOLICITUD
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            DialogResult r;
            switch (opElegida)
            {

                case Opcion.OpConsultar:
                    this.Close();
                    break;
                case Opcion.OpModificar:
                    r = MessageBox.Show("¿Desea modificar los datos del empleado?", "Modificar", MessageBoxButtons.YesNo);
                    if (r == DialogResult.Yes)
                    {
                        modificarEmpleado();
                    }

                    break;
                case Opcion.OpRegistrar:
                    Empleados em = new Empleados();
                    int tipoDoc = int.Parse(cmbTipoDocEmpleado.SelectedValue.ToString());
                    long nroDoc= long.Parse(txtNumDocumentoEmpleado.Text);
                    
                        r = MessageBox.Show("¿Desea Registrar el nuevo Empleado?", "Registrar", MessageBoxButtons.YesNo);
                        if (r == DialogResult.Yes)
                        {
                            if (em.nroDocExistente(tipoDoc, nroDoc))
                            {
                                MessageBox.Show("Ya existe un empleado registrado con este número de documento", "Aviso", MessageBoxButtons.OK);
                                limpiar();
                            }
                            else
                            {
                                registrarEmpleado();
                            }
                        }
                  
                    break;
                case Opcion.OpDarBaja:
                    registrarBajaEmpleado();
                    break;

            }

        }
        //
        private void descripcionBaja()
        {
            if (emSeleccionado.fechaBaja == null)
            {
                lblDescripcionBaja.Visible = true;
                lblDescripcionBaja.Text = "El empleado será dado de baja con la siguiente fecha:";
            }
            else
            {
                lblDescripcionBaja.Visible = true;
                lblDescripcionBaja.Text = "El empleado seleccionado ya posee una fecha de baja.";
            }


        }
        //VALIDAMOS DATOS
        private bool validarDatos()
        {
            bool validacion = true;
            string error = "";

            if (!string.IsNullOrEmpty(txtCelularEmpl.Text))
            {
                int cel;
                bool resultado;
                resultado = int.TryParse(txtCelularEmpl.Text, out cel);
                if (!resultado)
                {
                    validacion = false;
                    error += "El número de celular debe ser un numérico\r\n";
                }


            }

            if (!string.IsNullOrEmpty(txtPiso.Text))
            {
                int piso;
                bool resultado;
                resultado = int.TryParse(txtPiso.Text, out piso);
                if (!resultado)
                {
                    validacion = false;
                    error += "El número de piso debe ser un numérico\r\n";
                }

            }
            if (!string.IsNullOrEmpty(txtCodigoPostalEm.Text))
            {
                int cp;
                bool resultado;
                resultado = int.TryParse(txtCodigoPostalEm.Text, out cp);
                if (!resultado)
                {
                    validacion = false;
                    error += "El código postal debe ser numérico\r\n";
                }

            }
            if (string.IsNullOrEmpty(txtApellidoEmpleado.Text))
            {
                validacion = false;
                error += "El Apellido del Paciente es requerido\r\n";
            }
            if (string.IsNullOrEmpty(txtNombreEmpleado.Text))
            {
                validacion = false;
                error += "El nombre del Paciente es requerido\r\n";
            }
            if (string.IsNullOrEmpty(txtTelefonoEmpleado.Text))
            {
                validacion = false;
                error += "El número de teléfono del Paciente es requerido\r\n";
            }
            else
            {

                long te;
                bool resultado;
                resultado = long.TryParse(txtTelefonoEmpleado.Text, out te);
                if (!resultado)
                {
                    validacion = false;
                    error += "El numero de telefono debe ser numérico\r\n";
                }
            }
            if (cmbBarrioEmp.ValueMember == null)
            {
                validacion = false;
                error += "El Barrio donde vive del Paciente debe seleccionarse\r\n";
            }

            if (cmbTipoDocEmpleado.ValueMember == null)
            {
                validacion = false;
                error += "El Tipo de documento del paciente debe seleccionarse\r\n";
            }
            if (cmbCargoEmpl.ValueMember == null)
            {
                validacion = false;
                error += "El cargo del empleado debe seleccionarse\r\n";
            }

            if (cmbSexoEmpleado.Text == null)
            {
                validacion = false;
                error += "El Sexo del paciente debe seleccionarse\r\n";
            }

            if (string.IsNullOrEmpty(txtNumDocumentoEmpleado.Text))
            {
                validacion = false;
                error += "El numero de documento debe ingresarse\r\n";
            }
            else
            {
                if (opElegida != "UPD")
                {

                    long numero;
                    bool resul = long.TryParse(txtNumDocumentoEmpleado.Text, out numero);

                    if (!resul)
                    {
                        validacion = false;
                        error += "El numero de documento debe ser unicamente numerico\r\n";
                    }
                    else if (validarExistencia())
                    {
                        validacion = false;
                        error += "La persona ya se encuentra registrada\r\n";
                    }

                }


            }

            if (dtFechaNacimiento.Value == DateTime.Now)
            {
                validacion = false;
                error += "La fecha de nacimiento del paciente debe ingresarse de hoy\r\n";

            }
            else if (dtFechaNacimiento.Value >= DateTime.Now.Date)
            {
                validacion = false;
                error += "La fecha de nacimiento desde debe ser una fecha igual o menor a la fecha actual\r\n";
            }


            if (string.IsNullOrEmpty(txtCalleEmpl.Text))
            {
                validacion = false;
                error += "La calle debe ingresarse \r\n";
            }

            if (string.IsNullOrEmpty(txtNroCalleEmp.Text))
            {
                validacion = false;
                error += "El número calle debe ingresarse \r\n";
            }
            else
            {
                long numero;
                bool resul = long.TryParse(txtNroCalleEmp.Text, out numero);

                if (!resul)
                {
                    validacion = false;
                    error += "El numero de calle debe ser unicamente numerico\r\n";
                }
            }

            if (cmbLocalidadEm.ValueMember == null)
            {
                validacion = false;
                error += "La localidad debe seleccionarse \r\n";
            }
            if (cmbLocalidadEm.ValueMember == null)
            {

                validacion = false;
                error += "El barrio debe seleccionarse\r\n";
            }

            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK);
            }
            return validacion;

        }
        //CONSULTAR DATOS DEL EMPLEADO 
        private void consultarDatosEmpleado()
        {

            //DATOS PERSONA
            txtLegajoEmpleado.Text = Convert.ToString(emSeleccionado.Legajo);
            txtNombreEmpleado.Text = emSeleccionado.Nombre;
            txtApellidoEmpleado.Text = emSeleccionado.Apellido;
            cmbTipoDocEmpleado.SelectedValue = GTD.obtenerTipodDocumentoXCod(emSeleccionado.CodTipoDoc).Codigo;
            cmbSexoEmpleado.SelectedValue = GS.obtenerSexosXCod(emSeleccionado.CodSexo).CodSexo;
            txtNumDocumentoEmpleado.Text = Convert.ToString(emSeleccionado.NroDocumento);
            dtFechaNacimiento.Value = Convert.ToDateTime(emSeleccionado.FechaNacimiento);
            txtTelefonoEmpleado.Text = Convert.ToString(emSeleccionado.Telefono);
            txtCorreoelectronicoEmpl.Text = emSeleccionado.Mail;
            txtCelularEmpl.Text = Convert.ToString(emSeleccionado.Celular);

            //CARGAMOS DOMICILIO
            Domicilio oD = GD.obtenerDomicilio(emSeleccionado.idDomicilio);

            txtCalleEmpl.Text = oD.calle;
            txtNroCalleEmp.Text = Convert.ToString(oD.numero);
            txtPiso.Text = Convert.ToString(oD.piso);
            txtDepartamentoEm.Text = oD.Departamento;
            txtCodigoPostalEm.Text = Convert.ToString(oD.codPostal);

            //CARGAMOS CMBS BARRIO LOCALIDAD

            Barrio oB = GB.ObtenerBarrio(oD.idBarrio);
            cmbLocalidadEm.SelectedValue = GL.obtenerLocalidad(oB.idLocalidad).idLocalidad;
            cargarBarrios(GL.obtenerLocalidad(oB.idLocalidad).idLocalidad);
            cmbBarrioEmp.SelectedValue = oB.idBarrio;

            //CARGAMOS DATOS DEL CARGO
            Cargo oC = GC.obtenerCargo(emSeleccionado.idCargo);
            cmbCargoEmpl.SelectedValue = oC.idCargo;
            //CARGAMOS FECHA DE ALTA Y BAJA

            dtFechaAltaEp.Text = emSeleccionado.fechaAlta.ToString();
            lblFAEmp.Visible = true;
            dtFechaAltaEp.Visible = true;
            if (emSeleccionado.fechaBaja != null)
            {
                lblFBEmp.Visible = true;
                dtFechaBajaEmp.Visible = true;
                dtFechaBajaEmp.Text = emSeleccionado.fechaBaja.ToString();
            }


        }
        //REGITRAMOS EMPLEADO
        private void registrarEmpleado()
        {
            if (validarDatos())
            {
                //DATOS AL EMPLEADO

                //----------
                Empleado oE = new Empleado();
                oE.Nombre = txtNombreEmpleado.Text;
                oE.Apellido = txtApellidoEmpleado.Text;
                oE.NroDocumento = long.Parse(txtNumDocumentoEmpleado.Text);
                oE.CodTipoDoc = int.Parse(cmbTipoDocEmpleado.SelectedValue.ToString());

                oE.CodSexo = int.Parse(cmbSexoEmpleado.SelectedValue.ToString());
                oE.FechaNacimiento = Convert.ToDateTime(dtFechaNacimiento.Value);
                oE.Telefono = long.Parse(txtTelefonoEmpleado.Text);
                oE.foto = pictureBoxTomarFotoEmpleado.Image;
                if (!string.IsNullOrEmpty(txtCorreoelectronicoEmpl.Text))
                {
                    oE.Mail = txtCorreoelectronicoEmpl.Text;
                }
                if (!string.IsNullOrEmpty(txtCelularEmpl.Text))
                {
                    oE.Celular = long.Parse(txtCelularEmpl.Text);
                }

                //----------
                oE.Legajo = long.Parse(txtLegajoEmpleado.Text);
                oE.idCargo = int.Parse(cmbCargoEmpl.SelectedValue.ToString());
                oE.fechaAlta = DateTime.Now;

                //----------

                //DATOS DOMICILIO EMPLEADO
                Domicilio oD = new Domicilio();
                oD.calle = txtCalleEmpl.Text;
                oD.numero = int.Parse(txtNroCalleEmp.Text);
                oD.idBarrio = int.Parse(cmbBarrioEmp.SelectedValue.ToString());


                if (!string.IsNullOrEmpty(txtCodigoPostalEm.Text))
                {
                    oD.codPostal = int.Parse(txtCodigoPostalEm.Text);
                }
                if (!string.IsNullOrEmpty(txtDepartamentoEm.Text))
                {
                    oD.Departamento = txtDepartamentoEm.Text;
                }
                if (!string.IsNullOrEmpty(txtPiso.Text))
                {
                    oD.piso = int.Parse(txtPiso.Text);

                }
                //Para obtener el idDomicilio y idPersona lo hacemos en la clase Empleados.
                try
                {
                    if (GE.registrarEmpleado(oE, oD))
                    {
                        DialogResult r = MessageBox.Show("Se registro correctamente el Empleado:" + "\n Nombre:" + oE.Nombre + "\n Apellido:" + oE.Apellido + "\n\n ¿Desea registrar un nuevo Empleado?", "Empleado", MessageBoxButtons.YesNo);
                        if (r == DialogResult.Yes)
                        {
                            limpiar();
                            txtLegajoEmpleado.Text = Convert.ToString(GE.obtenerUltimoLegajo() + 1);
                        }
                        else
                        {
                            limpiar();
                        }
                    }
                }
                catch (Exception Ex)
                {

                    MessageBox.Show("Error:" + Ex.Message, "Aviso", MessageBoxButtons.OK);
                }

            }

        }
        //MODIFICAMOS EMPLEADO
        private void modificarEmpleado()
        {

            if (validarDatos())
            {

                bool empMod = false;
                bool domMod = false;
                bool cargMod = false;
                //DATOS PERSONA

                if (txtNombreEmpleado.Text != emSeleccionado.Nombre.ToString())
                {
                    empMod = true;
                }
                if (txtApellidoEmpleado.Text != emSeleccionado.Apellido.ToString())
                {
                    empMod = true;
                }
                if (cmbTipoDocEmpleado.Text != GTD.obtenerTipodDocumentoXCod(emSeleccionado.CodTipoDoc).Nombre.ToString())
                {
                    empMod = true;
                }
                if (dtFechaNacimiento.Value != emSeleccionado.FechaNacimiento)
                {
                    empMod = true;
                }
                if (cmbSexoEmpleado.Text != GS.obtenerSexosXCod(emSeleccionado.CodSexo).Nombre.ToString())
                {
                    empMod = true;
                }
                if (txtTelefonoEmpleado.Text != emSeleccionado.Telefono.ToString())
                {
                    empMod = true;
                }
                if (txtCorreoelectronicoEmpl.Text != emSeleccionado.Mail)
                {
                    empMod = true;
                }
                if (txtCelularEmpl.Text != Convert.ToString(emSeleccionado.Celular))
                {
                    empMod = true;
                }
                //DATOS DOMICILIO
                Domicilio oD = GD.obtenerDomicilio(emSeleccionado.idDomicilio);
                Barrio oB = GB.ObtenerBarrio(oD.idBarrio);
                if (txtCalleEmpl.Text != oD.calle.ToString())
                {
                    domMod = true;
                }
                if (txtNroCalleEmp.Text != oD.numero.ToString())
                {
                    domMod = true;
                }
                if (txtPiso.Text != oD.piso.ToString())
                {
                    domMod = true;
                }

                if (!txtDepartamentoEm.Text.Equals(oD.Departamento))
                {
                    domMod = true;
                }

                if (txtCodigoPostalEm.Text != Convert.ToString(oD.codPostal))
                {
                    domMod = true;
                }

                if (cmbLocalidadEm.Text != GL.obtenerLocalidad(oB.idLocalidad).nombre.ToString())
                {
                    domMod = true;

                }
                if (cmbBarrioEmp.Text != oB.nombre.ToString())
                {
                    domMod = true;

                }
                //DATOS CARGO
                Cargo oC = GC.obtenerCargo(emSeleccionado.idCargo);

                if (cmbCargoEmpl.Text != oC.nombre.ToString())
                {
                    cargMod = true;
                }

                //VALIDAMOS LA MODIFICACION
                if (empMod == true || domMod == true || cargMod == true)
                {
                    Empleado oEMod = new Empleado();
                    Domicilio oDMod = new Domicilio();
                    Cargo oCMod = new Cargo();

                    oEMod.codPersona = emSeleccionado.codPersona;
                    oEMod.Legajo = emSeleccionado.Legajo;
                    oEMod.Nombre = txtNombreEmpleado.Text;
                    oEMod.Apellido = txtApellidoEmpleado.Text;
                    oEMod.NroDocumento = long.Parse(txtNumDocumentoEmpleado.Text);
                    oEMod.CodTipoDoc = int.Parse(cmbTipoDocEmpleado.SelectedValue.ToString());
                    oEMod.CodSexo = int.Parse(cmbSexoEmpleado.SelectedValue.ToString());
                    oEMod.FechaNacimiento = Convert.ToDateTime(dtFechaNacimiento.Value);
                    oEMod.Telefono = long.Parse(txtTelefonoEmpleado.Text);
                    if (!string.IsNullOrEmpty(txtCorreoelectronicoEmpl.Text))
                    {
                        oEMod.Mail = txtCorreoelectronicoEmpl.Text;
                    }
                    if (!string.IsNullOrEmpty(txtCelularEmpl.Text))
                    {
                        oEMod.Celular = long.Parse(txtCelularEmpl.Text);
                    }

                    //DOMICILIO MODIFICADO
                    oDMod.idDomicilio = emSeleccionado.idDomicilio;
                    oDMod.calle = txtCalleEmpl.Text;
                    oDMod.numero = int.Parse(txtNroCalleEmp.Text);
                    oDMod.idBarrio = int.Parse(cmbBarrioEmp.SelectedValue.ToString());

                    if (!string.IsNullOrEmpty(txtCodigoPostalEm.Text))
                    {
                        oDMod.codPostal = int.Parse(txtCodigoPostalEm.Text);
                    }
                    if (!string.IsNullOrEmpty(txtDepartamentoEm.Text))
                    {
                        oDMod.Departamento = txtDepartamentoEm.Text;
                    }
                    if (!string.IsNullOrEmpty(txtPiso.Text))
                    {
                        oDMod.piso = int.Parse(txtPiso.Text);
                    }
                    oEMod.domicilio = oDMod;

                    //CARGO MODIFICADO
                    oCMod.idCargo = int.Parse(cmbCargoEmpl.SelectedValue.ToString());
                    oEMod.cargo = oCMod;
                    try
                    {
                        if (GE.modificarEmpleado(oEMod))
                        {
                            MessageBox.Show("Se Modifico correctamente el Empleado", "Aviso", MessageBoxButtons.OK);
                        }
                        else
                        {
                            MessageBox.Show("Error", "Aviso", MessageBoxButtons.OK);

                        }
                    }
                    catch (Exception Ex)
                    {

                        throw new Exception(Ex.Message);
                    }

                }



            }


        }
        //REGISTRAMOS BAJA EMPLEADO
        private void registrarBajaEmpleado()
        {
            if (emSeleccionado.fechaBaja == null)
            {
                DialogResult r = MessageBox.Show("¿Desea dar de baja el Empleado seleccionado en la fecha " + DateTime.Now.ToString("dd/MM/yyyy") + "?", "Registrar", MessageBoxButtons.YesNo);
                if (r == DialogResult.Yes)
                {
                    Empleado oE = new Empleado();
                    oE.Legajo = emSeleccionado.Legajo;
                    oE.fechaBaja = DateTime.Parse(dtFechaBajaEmp.Value.ToString());
                    try
                    {
                        if (GE.registrarBajaEmpleado(oE))
                        {
                            MessageBox.Show("El Empleado " + emSeleccionado.Apellido + " ha sido dado de baja con exito", "Baja de Empleado", MessageBoxButtons.OK);
                        }
                    }
                    catch (Exception Ex)
                    {

                        throw new Exception(Ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Ya tiene una fecha de baja registrada: " + emSeleccionado.fechaBaja.Value.ToString("dd/MM/yyyy"), "Aviso", MessageBoxButtons.OKCancel);
            }

        }



        //CERRAMOS EL FORM
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("¿Desea salir?", "Aviso", MessageBoxButtons.YesNo);
            if (r == DialogResult.Yes)
            {
                this.Dispose();
            }
        }

        //ACCEDEMOS A LA INTERFAZ
        #region Miembros de IOpcion

        public void setOpcion(string op)
        {
            opElegida = op;
        }

        public string getOpcion()
        {
            return opElegida;
        }

        #endregion
        //LIMPIAR BTN
        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("¿Desea Limpiar los campos completados?", "Aviso", MessageBoxButtons.YesNo);
            if (r == DialogResult.Yes)
            {
                limpiar();

            }

        }
        //FOTO EMPLEADO
        private void btnTomarFotoEmpl_Click(object sender, EventArgs e)
        {
            frmTomarFoto formFoto = new frmTomarFoto();
            formFoto.setFormEmpleado(this);
            formFoto.Show();
        }
        //Cargar Foto

        public void cargarFoto(string rutaFoto)
        {
            string pathFoto = rutaFoto;
            if (pathFoto != null)
            {
                pictureBoxTomarFotoEmpleado.ImageLocation = pathFoto;
            }
            pictureBoxTomarFotoEmpleado.SizeMode = PictureBoxSizeMode.StretchImage;
        }

        private void txtNombreEmpleado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtApellidoEmpleado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtDepartamentoEm_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNumDocumentoEmpleado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtTelefonoEmpleado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtCelularEmpl_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNroCalleEmp_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtPiso_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtCodigoPostalEm_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }



    }
}
